/*
 * Proyecto Manejador de Proyectos
 * @Autor Hector Hurtado
 */
package Mproyectos.entidades;

import java.io.Serializable;
import java.util.Collection;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;

/**
 * Representa un proyecto en nuestro sistema
 */
@Entity
public class Proyecto implements Serializable {

    /**
     * Nombre del proyecto
     */
    private String titulo;
    /**
     * Numero del proyecto
     */
    @Id
    private String numero;
    /**
     * Año de realización del proyecto
     */
    private int año;
    /**
     * semestre de realización del proyecto
     */
    private String semestre;
    /**
     * identifica si el proyecto es de postgrado o pregrado
     */
    private boolean pregrado;
    /**
     * grupo Investigacion del proyecto
     */
    private String grupoInvestigacion;
    /**
     * estudiantes que hicieron la Investigacion del proyecto
     */
    private String estudiantes;
    /**
     * resumen del proyecto
     */
    private String resumen;
    /**
     * entregable y ubicacion del proyecto
     */
    @OneToMany
    private Collection<Entregable> entregable;
    /**
     * programa al que pertenece el proyecto.
     */
    @OneToOne
    private Programa programa;
    /**
     * Lista de asesores del proyecto.
     */
    @OneToMany
    private Collection<Asesor> asesores;
    /**
     * Palabras Clave, que sirven para busqueda del proyecto.
     */
    @OneToMany
    private Collection<PalabraClave> palabrasClave;

    /**
     * Constructor vacio
     */
    public Proyecto() {
    }

    /**
     * Devuelve el hash del objeto basado en el nombre del proyecto
     *
     * @return codigo hash
     */
    @Override
    public int hashCode() {
        int hash = 7;
        hash = 71 * hash + (this.getTitulo() != null ? this.getTitulo().hashCode() : 0);

        return hash;
    }

    /**
     * Dos PROYECTOS son iguales si tienen el mismo identificador
     *
     * @param obj Objeto a comparar
     * @return true si el objeto es un Proyecto con el mismo nombre, false de lo
     * contrario
     */
    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final Proyecto other = (Proyecto) obj;
        if ((this.getTitulo() == null) ? (other.getTitulo() != null) : !this.titulo.equals(other.titulo)) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return getTitulo();
    }

    /**
     * @return el titulo del proyecto
     */
    public String getTitulo() {
        return titulo;
    }

    /**
     * @param titulo ,se ingresa el titulo del proyecto
     */
    public void setTitulo(String titulo) {
        this.titulo = titulo;
    }

    /**
     * @return las palabras Clave para la busqueda del proyecto
     */
    public Collection<PalabraClave> getPalabrasClave() {
        return palabrasClave;
    }

    /**
     * @param palabrasClave se ingresan las palabras Clave del proyecto
     */
    public void setPalabrasClave(Collection<PalabraClave> palabrasClave) {
        this.palabrasClave = palabrasClave;
    }

    /**
     * @return el numero del proyecto
     */
    public String getNumero() {
        return numero;
    }

    /**
     * @param numero se registra el numero del proyecto
     */
    public void setNumero(String numero) {
        this.numero = numero;
    }

    /**
     * @return el año en que se realizo el proyecto
     */
    public int getAño() {
        return año;
    }

    /**
     * @param año se registra el año en que se realizo el proyecto
     */
    public void setAño(int año) {
        this.año = año;
    }

    /**
     * @return el semestre en que se realizo el proyecto.
     */
    public String getSemestre() {
        return semestre;
    }

    /**
     * @param semestre se ingresa el semestre en que se elaboro el proyecto
     */
    public void setSemestre(String semestre) {
        this.semestre = semestre;
    }

    /**
     * @return the grupoInvestigacion
     */
    public String getGrupoInvestigacion() {
        return grupoInvestigacion;
    }

    /**
     * @param grupoInvestigacion the grupoInvestigacion to set
     */
    public void setGrupoInvestigacion(String grupoInvestigacion) {
        this.grupoInvestigacion = grupoInvestigacion;
    }

    /**
     * @return the estudiantes
     */
    public String getEstudiantes() {
        return estudiantes;
    }

    /**
     * @param estudiantes the estudiantes to set
     */
    public void setEstudiantes(String estudiantes) {
        this.estudiantes = estudiantes;
    }

    /**
     * @return the resumen
     */
    public String getResumen() {
        return resumen;
    }

    /**
     * @param resumen the resumen to set
     */
    public void setResumen(String resumen) {
        this.resumen = resumen;
    }

    /**
     * @return the entregableUbicacion
     */
    public Collection<Entregable> getEntregableUbicacion() {
        return entregable;
    }

    /**
     * @param entregableUbicacion the entregableUbicacion to set
     */
    public void setEntregableUbicacion(Collection<Entregable> entregable) {
        this.entregable = entregable;
    }

    /**
     * @return the programa
     */
    public Programa getPrograma() {
        return programa;
    }

    /**
     * @param programa the programa to set
     */
    public void setPrograma(Programa programa) {
        this.programa = programa;
    }

    /**
     * identifica si el proyecto es de postgrado o pregrado
     *
     * @return the pregrado
     */
    public boolean isPregrado() {
        return pregrado;
    }

    /**
     * identifica si el proyecto es de postgrado o pregrado
     *
     * @param pregrado the pregrado to set
     */
    public void setPregrado(boolean pregrado) {
        this.pregrado = pregrado;
    }

    /**
     * Lista de asesores del proyecto.
     *
     * @return the asesores
     */
    public Collection<Asesor> getAsesores() {
        return asesores;
    }

    /**
     * Lista de asesores del proyecto.
     *
     * @param asesores the asesores to set
     */
    public void setAsesores(Collection<Asesor> asesores) {
        this.asesores = asesores;
    }
}
